package cn.tedu.coolsharkmall.service.Impl;

import cn.tedu.coolsharkmall.ex.ServiceException;
import cn.tedu.coolsharkmall.mapper.AttributeTemplateMapper;
import cn.tedu.coolsharkmall.pojo.dto.AttributeTemplateAddNewDTO;
import cn.tedu.coolsharkmall.pojo.dto.AttributeTemplateUpdateDTO;
import cn.tedu.coolsharkmall.pojo.entity.AttributeTemplate;
import cn.tedu.coolsharkmall.pojo.vo.AttributeTemplateStandardVo;
import cn.tedu.coolsharkmall.service.IAttributeTemplateService;
import cn.tedu.coolsharkmall.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
public class AttributeTemplateImpl implements IAttributeTemplateService {

    @Autowired
    AttributeTemplateMapper mapper;
    // TODO 业务规则： 属性模版的名称必须唯一
    @Override
    public void addNew(AttributeTemplateAddNewDTO attributeTemplateAddNewDTO) {
        log.debug("开始处理【添加属性模版】的业务,参数{}", attributeTemplateAddNewDTO);
        //利用name检查属性模版是否存在
        String name = attributeTemplateAddNewDTO.getName();
        //利用count来查询数据是否存在
        int count = mapper.countByName(name);
        log.debug("根据名称统计数量,结果{}", count);
        //如果count > 0 的话表示用户名已被占用抛出异常
        if(count > 0){
            log.warn("添加属性模版失败, 属性模版名称【{}】已经被占用", name);
            throw new ServiceException(ServiceCode.ERROR_CONFLICT, "添加属性模版失败,属性模版名称已被占用!");
        }
        //创建一个AttributeTemplate对象
        AttributeTemplate attributeTemplate = new AttributeTemplate();
        //将attributeTemplateAddNewDTO复制到AttributeTemplate中
        BeanUtils.copyProperties(attributeTemplateAddNewDTO, attributeTemplate);
        //将复制过后的attributeTemplate插入到数据库中
        log.debug("添加属性模版成功!");
        mapper.insert(attributeTemplate);
    }

    @Override
    public void delete(Long id) {
        log.debug("开始处理【删除属性模版】的业务,参数{}", id);
        AttributeTemplateStandardVo attributeTemplateStandardVo = mapper.getStandardById(id);
        log.debug("根据id={}检查相册数据是否存在,结果{}", id, attributeTemplateStandardVo);
        if(attributeTemplateStandardVo == null){
            log.warn("删除相册失败, 属性模版【{}】不存在", id);
            String message = "删除相册失败,尝试删除的属性模版数据不存在，即将抛出异常";
            throw new ServiceException(ServiceCode.ERROR_NOT_FOUND, message);
        }
        log.debug("即将删除数据,参数:{}", id);
        mapper.deleteById(id);
        log.debug("删除数据成功!");
    }

    @Override
    public void updateInfoById(Long id, AttributeTemplateUpdateDTO attributeTemplateUpdateDTO) {
        log.debug("开始处理【添加属性模版】的业务,{}参数{}", id, attributeTemplateUpdateDTO);
        //利用name检查属性模版是否存在
        String name = attributeTemplateUpdateDTO.getName();
        //利用count来查询数据是否存在
        int count = mapper.countByNameAndNotId(id, name);
        log.debug("根据名称统计数量,结果{}", count);
        //如果count > 0 的话表示用户名已被占用抛出异常
        if(count > 0){
            log.warn("添加属性模版失败, 属性模版名称【{}】已经被占用", name);
            throw new ServiceException(ServiceCode.ERROR_CONFLICT, "添加属性模版失败,属性模版名称已被占用!");
        }
        //创建一个AttributeTemplate对象
        AttributeTemplate attributeTemplate = new AttributeTemplate();
        //将attributeTemplateAddNewDTO复制到AttributeTemplate中
        BeanUtils.copyProperties(attributeTemplateUpdateDTO, attributeTemplate);
        //将复制过后的attributeTemplate插入到数据库中
        log.debug("添加属性模版成功!");
        mapper.update(attributeTemplate);
    }


}
